home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / util / Currency.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  4.2 KB  |  157 lines

  1. package java.util;
  2.  
  3. import java.io.Serializable;
  4. import java.security.AccessController;
  5. import java.util.spi.CurrencyNameProvider;
  6. import sun.util.LocaleServiceProviderPool;
  7. import sun.util.resources.LocaleData;
  8. import sun.util.resources.OpenListResourceBundle;
  9.  
  10. public final class Currency implements Serializable {
  11.    private static final long serialVersionUID = -158308464356906721L;
  12.    private final String currencyCode;
  13.    private final transient int defaultFractionDigits;
  14.    private static HashMap instances = new HashMap(7);
  15.    static String mainTable;
  16.    static long[] scCutOverTimes;
  17.    static String[] scOldCurrencies;
  18.    static String[] scNewCurrencies;
  19.    static int[] scOldCurrenciesDFD;
  20.    static int[] scNewCurrenciesDFD;
  21.    static String otherCurrencies;
  22.    static int[] otherCurrenciesDFD;
  23.    private static final int A_TO_Z = 26;
  24.    private static final int INVALID_COUNTRY_ENTRY = 127;
  25.    private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 128;
  26.    private static final int SIMPLE_CASE_COUNTRY_MASK = 0;
  27.    private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 31;
  28.    private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 96;
  29.    private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT = 5;
  30.    private static final int SPECIAL_CASE_COUNTRY_MASK = 128;
  31.    private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 31;
  32.    private static final int SPECIAL_CASE_COUNTRY_INDEX_DELTA = 1;
  33.    private static final int COUNTRY_TYPE_MASK = 128;
  34.  
  35.    private Currency(String var1, int var2) {
  36.       this.currencyCode = var1;
  37.       this.defaultFractionDigits = var2;
  38.    }
  39.  
  40.    public static Currency getInstance(String var0) {
  41.       return getInstance(var0, Integer.MIN_VALUE);
  42.    }
  43.  
  44.    private static Currency getInstance(String var0, int var1) {
  45.       synchronized(instances) {
  46.          Currency var3 = (Currency)instances.get(var0);
  47.          if (var3 != null) {
  48.             return var3;
  49.          } else {
  50.             if (var1 == Integer.MIN_VALUE) {
  51.                if (var0.length() != 3) {
  52.                   throw new IllegalArgumentException();
  53.                }
  54.  
  55.                char var4 = var0.charAt(0);
  56.                char var5 = var0.charAt(1);
  57.                int var6 = getMainTableEntry(var4, var5);
  58.                if ((var6 & 128) == 0 && var6 != 127 && var0.charAt(2) - 65 == (var6 & 31)) {
  59.                   var1 = (var6 & 96) >> 5;
  60.                } else {
  61.                   if (var0.charAt(2) == '-') {
  62.                      throw new IllegalArgumentException();
  63.                   }
  64.  
  65.                   int var7 = otherCurrencies.indexOf(var0);
  66.                   if (var7 == -1) {
  67.                      throw new IllegalArgumentException();
  68.                   }
  69.  
  70.                   var1 = otherCurrenciesDFD[var7 / 4];
  71.                }
  72.             }
  73.  
  74.             var3 = new Currency(var0, var1);
  75.             instances.put(var0, var3);
  76.             return var3;
  77.          }
  78.       }
  79.    }
  80.  
  81.    public static Currency getInstance(Locale var0) {
  82.       String var1 = var0.getCountry();
  83.       if (var1 == null) {
  84.          throw new NullPointerException();
  85.       } else if (var1.length() != 2) {
  86.          throw new IllegalArgumentException();
  87.       } else {
  88.          char var2 = var1.charAt(0);
  89.          char var3 = var1.charAt(1);
  90.          int var4 = getMainTableEntry(var2, var3);
  91.          if ((var4 & 128) == 0 && var4 != 127) {
  92.             char var8 = (char)((var4 & 31) + 65);
  93.             int var6 = (var4 & 96) >> 5;
  94.             StringBuffer var7 = new StringBuffer(var1);
  95.             var7.append(var8);
  96.             return getInstance(var7.toString(), var6);
  97.          } else if (var4 == 127) {
  98.             throw new IllegalArgumentException();
  99.          } else if (var4 == 128) {
  100.             return null;
  101.          } else {
  102.             int var5 = (var4 & 31) - 1;
  103.             return scCutOverTimes[var5] != Long.MAX_VALUE && System.currentTimeMillis() >= scCutOverTimes[var5] ? getInstance(scNewCurrencies[var5], scNewCurrenciesDFD[var5]) : getInstance(scOldCurrencies[var5], scOldCurrenciesDFD[var5]);
  104.          }
  105.       }
  106.    }
  107.  
  108.    public String getCurrencyCode() {
  109.       return this.currencyCode;
  110.    }
  111.  
  112.    public String getSymbol() {
  113.       return this.getSymbol(Locale.getDefault());
  114.    }
  115.  
  116.    public String getSymbol(Locale var1) {
  117.       try {
  118.          LocaleServiceProviderPool var2 = LocaleServiceProviderPool.getPool(CurrencyNameProvider.class);
  119.          if (var2.hasProviders()) {
  120.             String var3 = (String)var2.getLocalizedObject(java.util.Currency.CurrencyNameGetter.access$000(), var1, (OpenListResourceBundle)null, this.currencyCode, new Object[0]);
  121.             if (var3 != null) {
  122.                return var3;
  123.             }
  124.          }
  125.  
  126.          ResourceBundle var5 = LocaleData.getCurrencyNames(var1);
  127.          return var5.getString(this.currencyCode);
  128.       } catch (MissingResourceException var4) {
  129.          return this.currencyCode;
  130.       }
  131.    }
  132.  
  133.    public int getDefaultFractionDigits() {
  134.       return this.defaultFractionDigits;
  135.    }
  136.  
  137.    public String toString() {
  138.       return this.currencyCode;
  139.    }
  140.  
  141.    private Object readResolve() {
  142.       return getInstance(this.currencyCode);
  143.    }
  144.  
  145.    private static int getMainTableEntry(char var0, char var1) {
  146.       if (var0 >= 'A' && var0 <= 'Z' && var1 >= 'A' && var1 <= 'Z') {
  147.          return mainTable.charAt((var0 - 65) * 26 + (var1 - 65));
  148.       } else {
  149.          throw new IllegalArgumentException();
  150.       }
  151.    }
  152.  
  153.    static {
  154.       AccessController.doPrivileged(new 1());
  155.    }
  156. }
  157.